import { ExtractPropTypes } from 'vue'
import { validatorColorValue, validatorSizeValue } from '../../utils'

/**
 * 分隔符有效值
 */
export const CountDownSeparators = ['cn', 'en'] as const
export type CountDownSeparator = typeof CountDownSeparators[number]

/**
 * countDown倒计时配置参数
 */
export type CountDownOption = {
  /** 显示天 */
  day?: boolean,
  /** 天为0时自动隐藏天数 */
  autoHiddenDay?: boolean
  /** 显示时 */
  hour?: boolean,
  /** 显示分 */
  minute?: boolean
  /** 显示秒 */
  second?: boolean
}

/**
 * props参数
 */
export const countDownProps = {
  /** 倒计时间, 单位s */
  time: {
    type: [String, Number],
    default: 0
  },
  /** 自动开始 */
  autoplay: {
    type: Boolean,
    default: true
  },
  /** 背景颜色, 支持内置颜色的值、十六进制、rgb()、rgba()的值 */
  bgColor: {
    type: String,
    default: '',
    validator: (value: string) => {
      return validatorColorValue('bg', value)
    }
  },
  /** 字体颜色, 支持内置颜色的值、十六进制、rgb()、rgba()的值 */
  color: {
    type: String,
    default: '',
    validator: (value: string) => {
      return validatorColorValue('color', value)
    }
  },
  /** 文字大小, 单位rpx */
  fontSize: {
    type: [String, Number],
    default: '',
    validator: (value: string | number) => {
      return validatorSizeValue(value)
    }
  },
  /** 分割符类型 */
  separatorType: {
    type: String,
    default: (): CountDownSeparator => {
      return 'en'
    }
  },
  /** 分隔符颜色, 支持内置颜色的值、十六进制、rgb()、rgba()的值 */
  separatorColor: {
    type: String,
    default: '',
    validator: (value: string) => {
      return validatorColorValue('color', value)
    }
  },
  /** 显示边框 */
  border: {
    type: Boolean,
    default: false
  },
  /** border边框颜色, 当border为true时才生效 */
  borderColor: {
    type: String,
    default: '',
    validator: (value: string) => {
      return validatorColorValue('border', value)
    }
  },
  /** 配置信息 */
  option: {
    type: Object,
    default: (): CountDownOption => {
      return {
        day: true,
        autoHiddenDay: true,
        hour: true,
        minute: true,
        second: true
      }
    }
  }
}
export type CountDownProps = ExtractPropTypes<typeof countDownProps>

export const countDownEmits = {
  /** 开始倒计时时触发 */
  start: () => true,
  /** 时间修改事件 */
  change: (time: number) => typeof time === 'number',
  /** 倒计时结束时触发 */
  end: () => true
}
export type CountDownEmits = typeof countDownEmits
